﻿using System;
using System.ServiceModel;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract
{
    /// <summary>
    /// Contrato de serviço
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract", Name = "IFaixaComissao", SessionMode = SessionMode.Allowed)]
    public interface IFaixaComissao
    {
        #region Métodos

        #region AlterarFaixaComissao

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá alterar o FaixaComissao informado como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Não.
        /// </summary>
        /// <param name="request">Parâmetro para alterar a faixa de comissão</param>
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarFaixaComissao")]
        void AlterarFaixaComissao(DataContract.Request.FaixaComissaoRequest request);

        #endregion

        #region AlterarFaixasComissoes

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá alterar uma coleção de Faixas Comissões informados como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Sim.
        /// </summary>
        /// <param name="listRequests">Parâmetros para alterar a faixa de comissão</param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarFaixasComissoes")]
        void AlterarFaixasComissoes(List<DataContract.Request.FaixaComissaoRequest> listRequests);

        #endregion

        #region ConsultarFaixasComissoes

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá Consultar uma lista de Faixas Comissões, utilizando o parâmetro informado.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Não.
        /// </summary>
        /// <param name="request">Parâmetro para consultar as faixas de comissões</param>
        /// <returns>Retorna uma lista de faixa de comissão</returns>
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarFaixasComissoes")]
        List<DataContract.Response.FaixaComissaoResponse> ConsultarFaixasComissoes(DataContract.Request.FiltroFaixaComissaoRequest request);

        #endregion

        #region ExcluirFaixaComissao

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá excluir o Faixa Comissão informado como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Não.
        /// </summary>
        /// <param name="request">Parâmetro para excluir uma faixa de comissão</param>
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirFaixaComissao")]
        void ExcluirFaixaComissao(DataContract.Request.FiltroFaixaComissaoChaveRequest request);

        #endregion

        #region ExcluirFaixasComissoes

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá excluir uma coleção de Faixas Comissões informados como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Sim.
        /// </summary>
        /// <param name="listRequests">Parâmetros para excluir uma faixa de comissão</param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirFaixasComissoes")]
        void ExcluirFaixasComissoes(List<DataContract.Request.FiltroFaixaComissaoChaveRequest> listRequests);

        #endregion

        #region ExecutarTransacoesFaixaComissao

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá excluir/incluir/alterar os objetos Faixa Comissão informados como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Sim.
        /// </summary>
        /// <param name="listExclusoes">Parâmetros para excluir uma faixa de comissão</param>
        /// <param name="listInclusoes">Parâmetros para incluir uma faixa de comissão</param>
        /// <param name="listAlteracoes">Parâmetros para alterar a faixa de comissão</param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExecutarTransacoesFaixaComissao")]
        void ExecutarTransacoesFaixaComissao(List<DataContract.Request.FiltroFaixaComissaoChaveRequest> listExclusoes, List<DataContract.Request.FaixaComissaoRequest> listInclusoes, List<DataContract.Request.FaixaComissaoRequest> listAlteracoes);

        #endregion

        #region IncluirFaixaComissao

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá incluir o Faixa Comissão informado como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Sim.
        /// </summary>
        /// <param name="request">Parâmetro para incluir uma faixa de comissão</param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirFaixaComissao")]
        DataContract.Response.FiltroFaixaComissaoChaveResponse IncluirFaixaComissao(DataContract.Request.FaixaComissaoRequest request);

        #endregion

        #region IncluirFaixasComissoes

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá incluir uma coleção de Faixas Comissões informados como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Sim.
        /// </summary>
        /// <param name="listRequests">Parâmetros para incluir uma faixa de comissão</param>
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirFaixasComissoes")]
        void IncluirFaixasComissoes(List<DataContract.Request.FaixaComissaoRequest> listRequests);

        #endregion

        #region ObterFaixaComissao

        /// <summary>
        /// <b>Descrição do serviço:</b> Serviço irá Obter o Faixa Comissão informado como parâmetro.
        /// <b>Tabelas Relacionadas: </b>TBOFAIXAASSES
        /// <b>Transacional:</b> Não.
        /// </summary>
        /// <param name="request">Parâmetro para obter uma determinada faixa de comissão</param>
        /// <returns>Retorna uma faixa de comissão</returns>
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterFaixaComissao")]
        DataContract.Response.FaixaComissaoResponse ObterFaixaComissao(DataContract.Request.FiltroFaixaComissaoChaveRequest request);
        
        #endregion

        #endregion
    }
}